最近老师讲了并行的排序算法,让我对这个原来不是很了解的排序算法产生了浓厚的兴趣。并行排序方法,是指采用并行计算的方法对一组数据进行排序,理论上是在类似内排序的环境下,采用多核并行的方法让时间降低,排序的复杂度最好的情况下能降低至O(n)左右。
排序的实质
排序的实质是什么?这是一个不是问题的问题。我们可以说是让所有的数都按照一定的规则被放置,但这种说法实际上是解释了排序的汉字含义。换句话不如说排序是:从序列中任选一对数都是有序的,那么此序列就是已排序的。
普通(串行)冒泡排序
为了满足上述的概念,我们发现了冒泡排序法:双层循环,比较数组中可取到的任意一对数字,如果不满足要求则交换。这是一种最简单的排序方法,理解起来很简单,也与上述的排序实质含义很符合。但是我们在平常的程序中完全不会采用冒泡排序,这是因为冒泡排序有很多缺点:
- 比较次数是所有排序中最多的,必须要进行(n-1)2/2次比较,按照冒泡排序的定义,很难有优化的方法。
- 交换次数不固定而且很多,相比较冒泡排序的次数不固定,同样是复杂度为O(n2)的选择排序虽然比较次数也较多,但是可以把交换次数稳定在n次。
- 不能利用序列一些隐含的信息。冒泡排序只能不断的比较比较比较,对序列没有记忆性,相比较冒泡排序同样是复杂度为O(n2)的插入排序和复杂度约为O(n1.3)的希尔排序却能在序列为几乎完成排序的状态下用相当好的效果完成排序。
冒泡排序、选择排序和插入排序同为O(n2)简单排序,但是相比较另外两种还有一些特点,冒泡排序基本没什么用算是废了。
package Main;
/**
* Title: BubbleSort
* Description: BubbleSort Test
* Company: www.QuinnNorris.com
*
* @date: 2017/11/30 上午12:31 星期四
*